CSRF Vulnerability

Cookie Nedir?

Web siteleri sayfalar arasında gezinti yaparken sürekli kullanıcı adı, şifre girme zorunluluğumuz olmaması adına, kullanıcı adı ve şifre girdikten sonra bize bir “sadla3skmjNsScdslnjjsnjd4d4asd” şeklinde bir anahtar yani cookie verilir. Cookie ler sayesinde sürekli kullanıcı adı şifre girmek zorunda kalmayız. Fakat bu kolaylığın da getirdiği zafiyet CSRF zafiyetidir.

 

CSRF Nedir?

Cross Site Request Forgery (Siteler Arası İstek Sahtekârlığı), bir web uygulamasının isteğin uygulama üzerinde yapılıp yapılmadığını tespit edememesi durumunda ortaya çıkan bir zafiyettir. Bu zafiyette bir sosyal mühendislikte dahil olabilir. Bu zafiyeti örneklerle bWAPP üzerinden test yaparak inceleyelim.

 

CSRF Nasıl Test Edilir?

image

Test aşamasında şifreyi değiştiren bir url oluşturarak kurbana tıklamasını sağlayabiliriz. Ya da sizin web sitenize ulaşan kurbanların farkında olmadan kod çalıştırmayı sağlayabilirsiniz (Bunun için test yapılacak web sitesinin clickjacking zafiyeti de bulunması gerekir). Şifremizi 123 yapıp url haline getirmeye çalışacağız.

 

 

image

Yukarıdaki gibi şifre değişikliği sağlayan url i kopyalıyoruz. Ve bunu herhangi bir kurbana tıklattırdığımızda şifresini bug yapmış olacağız. Deneme amaçlı kullanıcı adı ve şifresi allsafe olan bir hesap oluşturduk ve bu linke tıklattıracağız.

image

image

Kullanıcı ile url’e tıklamış olduk ve tekrar giriş yaptığımızda allsafe şifresini kabul etmedi şifreyi bug olarak denediğimizde girebildik.

image

Bir de PortSwigger’ın CSRF ile ilgili bir labını çözelim.

image

Burada bize email değiştirmeyle ilgili bir CSRF zafiyeti bulunduğu ve html dosyası oluşturarak kurbanın epostasını değiştirin diyor. Lab’a giriyoruz ve My account bölümüne tıkladıktan sonra kullanıcı adı wiener şifre peter şeklinde ilk başta giriş yapacağız.

image

Karşımıza yukarıdaki gibi bir sayfa geliyor bu kısımda BurpSuite paketini inceleyeceğiz ve aslında BurpSuite (PRO) bize hazır bir html kodu düzenlemiş olacak. Fakat biz şu şekilde html dosyasını kendimiz hazırlayacağız.

    <script>history.pushState('', '', '/')</script>

    <form action="buraya degisme url mizi giriyoruz" method="POST">

      <input type="hidden" name="email" value="bu kısma bu şekilde mail giriyoruz&#64;mail&#46;com" />

      <input type="submit" value="Submit request" />

    </form>

    <script>

      document.forms[0].submit();

    </script>

 

Kodumuzu düzenledikten sonra kurbanın gireceği web sitesi olarak düşünülmüş “go to exploit server” butonuna tıklıyoruz ve buraya kurban girdiğinde çalıştıracağımız kodu yazacağız.

 

image

Yukarıdaki şekildeki gibi ilk başta kodumuzu yazıyoruz. Aşama 2 olarak Store butonunu ile kodu depoluyoruz ve 3. Aşama da kurban bu sayfaya maruz kalıyor. Ve yeni şifresi [email protected]  şeklinde olmuş oluyor.

image

 

 

Peki Gerçek Web Sitelerinde Labaratuvarlardaki Gibi Çıkar Mı?

PortSwiggerda  çözdüğümüz lab biraz daha az karşılaşılabilmekte bunun sebebi bir web sitesinin sayfasını başka bir web sitesinde çalıştırmaya clickjacking zafiyeti deniliyor yani bir zafiyet daha olacakki bu saldırı ile gerçekleşsin. Fakat iki çözdüğümüz örnek ile zafiyet bulmak mümkün. Günümüzde buna tarayıcıların da önlem almasına rağmen hala sıklıkla karşılaşılabilmekte. 

 

 

 

 

Birkaç Örnek CSRF Raporları

https://hackerone.com/reports/1085336

https://hackerone.com/reports/1046630

https://hackerone.com/reports/534450